<?
################## FUNZIONI DI SERVIZIO ############################################
require 'jsonwrapper.php';

function esegui_queryRs($qry)  {
	global $conn;
	# ritorno un recordset
	$rs = $conn->Execute($qry);
	if($rs) {
	 return $rs;
	} else
	  return null;
}

function esegui_queryUpd($qry)  {
	global $conn;
	# ritorno un json
	$rs = $conn->Execute($qry);
	if($rs) {
	 $rs->Close();
	 $error = '{success:true}';
	} else
		$error = '{success:false,errors:{error:"Errore nella connessione al DB"}}';
	  return $error;
}

function esegui_queryInsert($qry)  {
	global $conn;
	# ritorno id
	$rs = $conn->Execute($qry);
	if($rs) {
	 $rs->Close();
	 $error = $conn->Insert_ID();
	} else
		$error = 0;
	  return $error;
}

function esegui_query($qry)  {
	global $conn;
	# ritorno un array
	$rs = $conn->Execute($qry);
	if($rs) {
		$arr = Array();
		//$arrvalue = Array();
		$fields = $rs->FieldCount();
	  while(!$rs->EOF)  {
		  for($i=0;$i<$fields;$i++)  {
				$field = $rs->FetchField($i);
				$value = addslashes(htmlentities($rs->Fields($field->name)));
				$arrvalue[$field->name] = $value;
		  }
		  array_push($arr,$arrvalue);
	  	  $rs->MoveNext();
	  }
	 return $arr;
	} else
	  return null;
}

function get_json($qry)  {
	global $conn;
	$rs = esegui_query($qry);
	if(!is_null($rs))  {
	  $json = json_encode($rs);
	  $json = str_replace(array("\r", "\n"), "", $json);
	} else
		$json = null;
	return $json;
}

function getJsonFromArray($arr)  {
	global $conn;
	if(!is_null($arr))  {
	  $json = json_encode($rs);
	} else
		$json = null;
	return $json;
}

function getUser($iduser)  {
	global $conn;
	$qry = "SELECT nome,stato FROM utenti WHERE id=$iduser;";
	$rs = esegui_queryRs($qry);
	$user = Array();
	if(!is_null($rs))  {
	  $user[0] = $rs->Fields("nome");
	  $user[1] = $rs->Fields("stato");
	}
	return $user;
}

function getJsonExt($qry,$start,$limit,$sort,$dir,$func)  {
	global $conn;
	$qry_tot = $qry;
	$qry = $qry." ORDER BY $sort $dir LIMIT $start,$limit;";
	//die($qry);
	$arr = esegui_query($qry_tot);
	$strjson = get_json($qry);
	$json = $func.'({"totalCount":"'.count($arr).'","rows":'.$strjson.'})';
	return $json;
}

function getJsonProvince()  {
	global $conn;
	$qry = "SELECT sigla,provincia FROM province ORDER BY provincia;";
	return get_json($qry);
}

function getProvincia($sigla) {
  $qry = "SELECT provincia FROM province WHERE sigla='$sigla';";
  $rs = esegui_queryRs($qry);
  return $rs->Fields('provincia');
}

function formatDataMySql($d,$split) {
  list($g,$m,$a) = explode($split,$d);
  return "$a-$m-$g";
}

//############## FUNCTION FILE TO BROWSER #########################################
function dl_file_resumable($file, $is_resume=TRUE)
{
    //First, see if the file exists
    if (!is_file($file))
    {
        die("<b>404 File not found!</b>");
    }

    //Gather relevent info about file
    $size = filesize($file);
    $fileinfo = pathinfo($file);
   
    //workaround for IE filename bug with multiple periods / multiple dots in filename
    //that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe
    $filename = (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) ?
                  preg_replace('/\./', '%2e', $fileinfo['basename'], substr_count($fileinfo['basename'], '.') - 1) :
                  $fileinfo['basename'];
   
    $file_extension = strtolower($path_info['extension']);

    //This will set the Content-Type to the appropriate setting for the file
    switch($file_extension)
    {
        case 'exe': $ctype='application/octet-stream'; break;
        case 'zip': $ctype='application/zip'; break;
        case 'mp3': $ctype='audio/mpeg'; break;
        case 'mpg': $ctype='video/mpeg'; break;
        case 'avi': $ctype='video/x-msvideo'; break;
        case 'pdf': $ctype='application/pdf'; break;
        case 'doc': $ctype='application/msword'; break;
        default:    $ctype='application/force-download';
    }

    //check if http_range is sent by browser (or download manager)
    if($is_resume && isset($_SERVER['HTTP_RANGE']))
    {
        list($size_unit, $range_orig) = explode('=', $_SERVER['HTTP_RANGE'], 2);

        if ($size_unit == 'bytes')
        {
            //multiple ranges could be specified at the same time, but for simplicity only serve the first range
            //http://tools.ietf.org/id/draft-ietf-http-range-retrieval-00.txt
            list($range, $extra_ranges) = explode(',', $range_orig, 2);
        }
        else
        {
            $range = '';
        }
    }
    else
    {
        $range = '';
    }

    //figure out download piece from range (if set)
    list($seek_start, $seek_end) = explode('-', $range, 2);

    //set start and end based on range (if set), else set defaults
    //also check for invalid ranges.
    $seek_end = (empty($seek_end)) ? ($size - 1) : min(abs(intval($seek_end)),($size - 1));
    $seek_start = (empty($seek_start) || $seek_end < abs(intval($seek_start))) ? 0 : max(abs(intval($seek_start)),0);

    //add headers if resumable
    if ($is_resume)
    {
        //Only send partial content header if downloading a piece of the file (IE workaround)
        if ($seek_start > 0 || $seek_end < ($size - 1))
        {
            header('HTTP/1.1 206 Partial Content');
        }

        header('Accept-Ranges: bytes');
        header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$size);
    }

    //headers for IE Bugs (is this necessary?)
    //header("Cache-Control: cache, must-revalidate");  
    //header("Pragma: public");

    header('Content-Type: ' . $ctype);
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header('Content-Length: '.($seek_end - $seek_start + 1));

    //open the file
    $fp = fopen($file, 'rb');
    //seek to start of missing part
    fseek($fp, $seek_start);

    //start buffered download
    while(!feof($fp))
    {
        //reset time limit for big files
        set_time_limit(0);
        print(fread($fp, 1024*8));
        flush();
        ob_flush();
    }

    fclose($fp);
    exit;
}

function generatePassword ($length=8) {
	    $password = "";
	    $possible = "0123456789bcdfghjkmnpqrstvwxyz"; 
	    $i = 0; 
	    while ($i < $length) { 
	        $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
	            if (!strstr($password, $char)) {
	                $password .= $char;
	                $i++;
	            }
	        }
        return $password;
}

function fromTitToUrl($tit) {
	 //$url = str_replace("-","|",$tit);
	 $url = $tit;
	 $url = str_replace("/","_",$url);
	 $url = str_replace(" ","-",$url);
	 $url = str_replace(".","~",$url);
	 $url = str_replace("+","*",$url);
	 return $url;
}

function fromUrlToTit($url) {
	 $url = utf8_decode($url);
	 $tit = str_replace("-"," ",$url);
	 $tit = str_replace("_","/",$tit);
	 $tit = str_replace("|","-",$tit);
	 $tit = str_replace("~",".",$tit);
	 $tit = str_replace("*","+",$tit);
	 return $tit;
}

function strPermalink($str) {
 $pl = strtolower(htmlEnc($str)); 
 $pl = preg_replace("#&([aeiouny])(acute|circ|grave|ring|tilde|uml);#", '$1', $pl);
 $pl = str_replace('&ccedil;','c',$pl);
 $pl = str_replace('&amp;','e',$pl);
 $pl = str_replace('&euro;','e',$pl);
 $pl = preg_replace("#&([ao])elig;#", '$1e', $pl);
 $pl = str_replace('&iexcl;','i',$pl);
 $pl = str_replace('&scaron;','s',$pl);
 $pl = preg_replace("#&sup([1-3]);#", '$1', $pl);
 $pl = preg_replace("#&([^;]+);#", '', $pl);
 $pl = str_replace(' ','-',$pl);
 $pl = preg_replace("#[^a-zA-Z0-9\-_]#", '', $pl);
 while(strstr($pl,'--'))
  $pl = str_replace('--', '-', $pl);
 return $pl;
}

function strPermalinkNoSpace($str) {
 $pl = strtolower(htmlEnc($str)); 
 $pl = preg_replace("#&([aeiouny])(acute|circ|grave|ring|tilde|uml);#", '$1', $pl);
 $pl = str_replace('&ccedil;','c',$pl);
 $pl = str_replace('&amp;','e',$pl);
 $pl = str_replace('&euro;','e',$pl);
 $pl = preg_replace("#&([ao])elig;#", '$1e', $pl);
 $pl = str_replace('&iexcl;','i',$pl);
 $pl = str_replace('&scaron;','s',$pl);
 $pl = preg_replace("#&sup([1-3]);#", '$1', $pl);
 $pl = preg_replace("#&([^;]+);#", '', $pl);
 //$pl = str_replace(' ','-',$pl);
 $pl = preg_replace("#[^a-zA-Z0-9\-_]#", '', $pl);
 while(strstr($pl,'--'))
  $pl = str_replace('--', '-', $pl);
 return $pl;
}

function htmlEnc($str, $nl2br = false) {
 $str = htmlentities($str,ENT_QUOTES, 'UTF-8');
 if ($nl2br)
  return str_replace("\n","<br />",$str);
 else
  return $str;
}

function chmodFtp($folder,$perm) {
	$connect = ftp_connect($ftp_host);
	$login = ftp_login($connect, $ftp_username, $ftp_pwd);
	ftp_site($connect, "CHMOD $perm ".$folder);
	ftp_quit($connect);
}
?>